﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 25/04/2014
 * Time: 07:23 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Collections.Generic;

namespace Gestión_UTN.blimpl
{
	/// <summary>
	/// Description of notablimpl.
	/// </summary>
	public class notablimpl:bl.notabl
	{
		private static da.notada createNota = factories.dafactory.createNota();
		private static bl.alumnobl createAlumno = factories.blfactory.createAlumno();
		private static bl.cursadabl createCursada = factories.blfactory.createCursada();
		private static bl.materiabl createMateria = factories.blfactory.createMateria();
		private static bl.tipoExamenbl createTipoExamen = factories.blfactory.createTipoExamen();
		
		public notablimpl()
		{
		}
		
		public bool SaveNota(Gestión_UTN.bo.Notabo not)
		{
			bool ingresada = false;
			
			try 
			{
				ingresada = (null != not)
					? createNota.SaveNota(not.Alumno.Dni,
					                      not.Materia.Id,
					                      not.Cursada.Id,
					                      not.Tipo_examen.Id,
					                      not.Fecha,
					                      not.Valor)
					:false;
			} 
			catch (Exception) 
			{
				
				ingresada = false;
			}
			
			return ingresada;
		}
		
		public bool DeleteNota(int alu_dni, int mat_id, DateTime fecha)
		{
			bool eliminada = false;
			
			try 
			{
				eliminada = (0 != alu_dni && 0 != mat_id && null != fecha)
					? createNota.DeleteNota(alu_dni, mat_id, fecha)
					:false;
			} 
			catch (Exception) 
			{
				
				eliminada = false;
			}
			
			return eliminada;
		}
		
		public bool ModifyNota(int alu_dni_anterior, int mat_id_anterior, DateTime fecha_anterior, Gestión_UTN.bo.Notabo not)
		{
			bool modificada =false;
			
			try 
			{
				modificada = (0 != alu_dni_anterior && 0 != mat_id_anterior && null != fecha_anterior && null != not)
					? createNota.ModifyNota(alu_dni_anterior,mat_id_anterior,fecha_anterior,not.Alumno.Dni,not.Materia.Id,
					                        not.Cursada.Id, not.Tipo_examen.Id, not.Fecha, not.Valor)
					:false;
			} 
			catch (Exception) 
			{
				
				modificada = false;
			}
			
			return modificada;
		}
		
		public System.Data.DataTable FindAllNotas()
		{
			DataTable tablaNotas = null;
			
			try 
			{
				tablaNotas = createNota.FindAllNotas();
			} 
			catch (Exception) 
			{
				
				tablaNotas = null;
			}
			
			return tablaNotas;
		}
		
		public System.Collections.Generic.List<Gestión_UTN.bo.Notabo> FindNotaByDni(int alu_dni)
		{
			List<bo.Notabo> notas = null;
			
			try 
			{
				List<Entities.Nota> nots = (0 != alu_dni) ? createNota.FindNotaByDni(alu_dni) : null;
				
				if (null != nots)
				{
					notas = new List<Gestión_UTN.bo.Notabo>();
					
					foreach (var n in nots)
					{
						bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(n.Alu_dni);
						
						bo.Cursadabo cur = createCursada.FindCursadasById(n.Cur_id);
						
						bo.Materiabo mat = createMateria.FindMateriaByMatId(n.Mat_id);
						
						bo.TipoExamenbo tie = createTipoExamen.FindTipoExamenById(n.Tie_id);
						
						bo.Notabo not = new bo.Notabo(alu,mat,cur,tie,n.Fecha,n.Valor);
						
						notas.Add(not);
						
						not = null;
						
						alu = null;
						
						cur = null;
						
						mat = null;
						
						tie = null;
					}					
				}
			} 
			catch (Exception)
			{
				
				notas = null;
			}
			
			return notas;
		}
		
		public System.Collections.Generic.List<Gestión_UTN.bo.Notabo> FindNotaByMateria(int mat_id, int cur_id)
		{
			List<bo.Notabo> notas = null;
			
			try 
			{
				List<Entities.Nota> nots = (0 != mat_id && 0 != cur_id) ? createNota.FindNotaByMateria(mat_id,cur_id) : null;
				
				if (null != nots)
				{
					notas = new List<Gestión_UTN.bo.Notabo>();
					
					foreach (var n in nots)
					{
						bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(n.Alu_dni);
						
						bo.Cursadabo cur = createCursada.FindCursadasById(n.Cur_id);
						
						bo.Materiabo mat = createMateria.FindMateriaByMatId(n.Mat_id);
						
						bo.TipoExamenbo tie = createTipoExamen.FindTipoExamenById(n.Tie_id);
						
						bo.Notabo not = new bo.Notabo(alu,mat,cur,tie,n.Fecha,n.Valor);
						
						notas.Add(not);
						
						not = null;
						
						alu = null;
						
						cur = null;
						
						mat = null;
						
						tie = null;
					}					
				}
			} 
			catch (Exception)
			{
				
				notas = null;
			}
			
			return notas;
		}
	}
}
